
#include "iostream"
#include "vector"
#include "unordered_map"
#include "unordered_set"
#include "algorithm"
#include "string"
#include "list"
#include "string.h"

struct Rule{
    int a;
    int b;
    Rule(int a,int b):a(a),b(b){

    }
};

class OneLoop{
public:

    bool same_as_last_window(std::string &s,int i,int w){
        for(int j=0;j<w;j++){
            if(s[i+j]!=s[i+j-w]){
                return false;
            }
        }
        return true;
    }
    void run(
            std::string&s
            ){
        int max_r=1;
        //窗口长度 比如2
        for(int i=1;i<=s.size()/2;i++){
            //窗口偏移 只可能为0或1
            //for(int j=0;j<i;j++)
            int j=0;
            {
                //窗口最大数量
                int cnt=1;
//                int max1=1;
                int m=(s.size()-j)/i;
                bool all_same= true;
                for(int k=1;k<m;k++){
                    if(!same_as_last_window(s,j+k*i,i)){
//                           cnt++;
                        all_same= false;
                        break;
//                        max_r= std::max(max_r,cnt);
                    }
//                    else{
//                        cnt=1;
//                    }
                }
                if(s.size()%i==0&&all_same){
                    max_r= std::max(max_r,m);
                }


            }
        }

        printf("%d\n",max_r);
    }
};
class Solution {
public:
    void run() {

        bool first = true;
        int a,b,c,d,e;
        std::string s1,s2;
        while (
//                std::cin>>a
                std::getline(std::cin,s1)
                )
        {
//            std::getline(std::cin,s2);
            OneLoop loop;
            loop.run(s1);
        }
    }
};

int main() {
//    bool cur_num= true;
    Solution().run();
    return 0;
}

